<?php 
class indexation_admin extends MX_Controller{
	public  $chaine='';
	public	$poids=2;
	public	$product_info_id;
	
	private function strip_tags_javascript($chaine_body_html){
		$modele_balises_scripts = "~(.+)<script.*</script>(.+)~i";
		$ereg_replace = preg_replace($modele_balises_scripts, "$1$2", $chaine_body_html);
		return $ereg_replace;
	}
	private function conversionEntitesHTML($chaine_body_texte_entites_html){

		$table_caracts_html = get_html_translation_table(HTML_ENTITIES);
		$table_html_caracts = array_flip($table_caracts_html);
		$chaine_sans_entitesHTML =  strtr($chaine_body_texte_entites_html, $table_html_caracts);
	
		return $chaine_sans_entitesHTML;
	}
	private function fractionner_chaine($allow, $chaine){
		$tab = array();
		$chaine =  mb_ereg_replace("[^a-z0-9$allow]", ' ',$chaine);
		//supprimer les 2 espaces
		$chaine =  mb_ereg_replace('\s[\s]+', ' ',$chaine);
		//fractionnement de la chaine par espace
		$tab =mb_split("\s", $chaine);
		return $tab;
	}
	private function filtrer_taille($chaine_array,$taille=2){
		$tab = array();
		foreach($chaine_array as $element)
		{
			if (mb_strlen($element) > $taille) 
				$tab[] = $element;
		}
		return $tab;
	}
	private function filtrer_vide($chaine_array){
		$mot_commun=$this->model()->mot_commun();
		foreach($chaine_array as $key=> $element) 
			if( $element=='' or in_array($element,$mot_commun) or strlen($element)<2) 
				unset($chaine_array[$key]);
		return $chaine_array;
	}
	private function calculer_poids($tableau_elems_occurrs, $coefficient){
		$tab_elements_poids = array();
		
		foreach($tableau_elems_occurrs as $elem => $occurr)
		{
			$tab_elements_poids[$elem] = $occurr * $coefficient;
		}
		return $tab_elements_poids;
	}
	public function calculer($chaine,$poids){
		//1:  Débalisage du corps du docuement des scripts (javascript)
		$chaine_body_html_sans_script = self::strip_tags_javascript($chaine);
		
		//2: Débalisage du corps du docuement des balises HTML
		 $chaine_body_texte_entites_html = strip_tags($chaine_body_html_sans_script);
		
		//3: Conversion des caractères HTML :  &eacute; etc.
		 $chaine_body_texte = self::conversionEntitesHTML($chaine_body_texte_entites_html);
		
		//4: Mise ne miniscule
		
		$chaine_body_texte = trim(strtolower($chaine_body_texte));
		
		//5: Fractionement en éléments
		$chaine_array=self::fractionner_chaine("éàèçûôêâîöïüëäù", $chaine_body_texte);
		
		
		//6: Filtrage par taille
		$chaine_array=self::filtrer_taille($chaine_array);
		
		//7: Filtrage par liste d'éléments_vides
		$chaine_array=self::filtrer_vide($chaine_array);
		
		//8: Calcul des  occurrences
		$tableau_elems_occurrs=array_count_values( $chaine_array );
		
		//9: Calcul des poids
		return $tab_body=self::calculer_poids($tableau_elems_occurrs, $poids);
	}
	public function delete($id=''){
		
		if(!$id)$id=$this->product_info_id;
		$del=array('id_doc' => $id);
		
		$query = $this->db->get_where('index_word',$del);
		if($query->num_rows()){
			foreach ($query->result() as $row)
		
			$this->db->delete('index_product_word',array('id'=>$row->id_word));
		
			$this->db->delete('index_word',$del);
		}
	}
	public function save($tag=false){
		if(!trim($this->chaine)) return false;
		$tab_body=self::calculer($this->chaine,$this->poids);// 2 point pour description
		/*//10: Fusion avec le head	
		$keywords_poids==self::calculer($this->keywords,5);// 5 point pour keywords
		$title_poids=self::calculer($this->prd_name, 6);//6 point pour Titre
	
		//Fusion le keywords avec le description avec le body
		$tab_fichier=merge_array($keywords_poids,$title_poids, $tab_body);
		*/
		//11: Mise ne base de données : termes :  id, mot, poids
		// Liste les mots commun
		
		if(!empty($tab_body)){
			foreach($tab_body as $mot=>$poids){
				if($mot=trim($mot)){
					$this->model()->mot_save($mot,$this->product_info_id,$poids);
				}
			}
		}
	}
}